package com.sam.event;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;

import com.google.api.client.util.DateTime;
import com.google.api.services.calendar.Calendar;
import com.google.api.services.calendar.Calendar.Events.Insert;
import com.google.api.services.calendar.model.Event;
import com.google.api.services.calendar.model.Event.ExtendedProperties;
import com.google.api.services.calendar.model.EventAttendee;
import com.google.api.services.calendar.model.EventDateTime;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.sam.BuscarCalendariosAdmisor;
import com.sam.entities.Admisor;
import com.sam.entities.Afiliado;
import com.sam.entities.CalendarsAdmisor;
import com.sam.utils.Utils;

public class CrearEvento extends ActionSupport  {

	private static final long serialVersionUID = -45588661124339251L;
	private Date fecha;
	private String horaDesde;
	private String horaHasta;
	private String admisor;
	private String admisorNombre;
	private java.util.List<CalendarsAdmisor> calendarsAdmisor;
	private Date fechaDesde;
	private Date fechaHasta;
	
	public void validate() {
		try {
			if (fecha != null /*|| fecha.isEmpty()*/)
			{
				DateFormat fechaJsp = new SimpleDateFormat("dd/MM/yyyy");
				SimpleDateFormat format = new SimpleDateFormat("dd/MM/yyyy HH:mm");
				fechaDesde = format.parse(fechaJsp.format(fecha)+ " " + horaDesde);
				fechaHasta = format.parse(fechaJsp.format(fecha)+ " " + horaHasta);
				
				/*
				String hora[] = horaDesde.split(":");
				fechaDesde = new Date(2011, 11, 10, 10, 30);
				hora = horaHasta.split(":");
				fechaHasta = new Date(Integer.parseInt("2011"), Integer.parseInt("11"), Integer.parseInt("10"), Integer.parseInt("11"), Integer.parseInt("00"));
				*/
				
				
				
			
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	public String execute(){
		try {
			calendarsAdmisor = new BuscarCalendariosAdmisor().obtenerCalendarios(admisor);
			if (fecha == null /*|| fecha.isEmpty()*/)
			{
				addActionError("Debe elegir una fecha.");
				return ERROR;
			}
			
			if(fechaDesde.compareTo(fechaHasta) > 0)
			{
				addActionError("Horario Incorrecto.");
				return ERROR;
			}
			 Map<String, Object> session = ActionContext.getContext().getSession();
			// Initializing some Objects
			
			Afiliado afiliado = (Afiliado)session.get("afiliadoValido");
			Calendar service = Utils.getCalendarServices();
			Event event = new Event();
			event.setSummary("Turno Afiliado "+ afiliado.getNombre() + " " + afiliado.getApellido());
			event.setDescription("Evento creado por "+session.get("usuario")+" para el afiliado "+ afiliado.getNombre() + " " + afiliado.getApellido() +" desde la pagina.");
			
			Admisor obtenerAdmisor = Utils.obtenerAdmisor(admisor);
			event.setLocation(obtenerAdmisor.getDireccionAsString() + ", Ciudad Autonoma de Buenos Aires");
			ArrayList<EventAttendee> attendees = new ArrayList<EventAttendee>();
			attendees.add(new EventAttendee().setEmail(afiliado.getEmail()));
			event.setAttendees(attendees);
			
			ExtendedProperties propertie =  new ExtendedProperties();
			
			Map<String, String> mapa = new HashMap<String, String>();
			mapa.put("map_nroAfiliado", afiliado.getNumeroAfiliado());
			mapa.put("map_usuarioCreador", (String)session.get("usuario"));

			propertie.setShared(mapa);
			event.setExtendedProperties(propertie);
			
			
			DateTime start = new DateTime(new Date(fechaDesde.getTime()+10800000), TimeZone.getTimeZone("UTC"));
			event.setStart(new EventDateTime().setDateTime(start));
			DateTime end = new DateTime(new Date(fechaHasta.getTime()+10800000), TimeZone.getTimeZone("UTC"));
			event.setEnd(new EventDateTime().setDateTime(end));
			
			
			Insert insertevent = service.events().insert("primary", event);
			insertevent.getUnknownKeys().put("xoauth_requestor_id", admisor);
			insertevent.getUnknownKeys().put("key", Utils.GOOGLE_KEY);
			
			Event createdEvent = insertevent.execute();
			
			System.out.println("Evento creado: "+createdEvent.getId());
			
			calendarsAdmisor = new BuscarCalendariosAdmisor().obtenerCalendarios(admisor);
			return SUCCESS;
		} catch (Exception e) {
			e.printStackTrace();
			  addActionError(getText("Error al crear el evento!"));
			  return ERROR;
		}
	}
	
	
	
	public Date getFecha() {
		return fecha;
	}


	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}


	public String getHoraDesde() {
		return horaDesde;
	}


	public void setHoraDesde(String horaDesde) {
		this.horaDesde = horaDesde;
	}


	public String getHoraHasta() {
		return horaHasta;
	}


	public void setHoraHasta(String horaHasta) {
		this.horaHasta = horaHasta;
	}

	
	public String getAdmisor() {
		return admisor;
	}


	public void setAdmisor(String admisor) {
		this.admisor = admisor;
	}
	
	public String getAdmisorNombre() {
		return admisorNombre;
	}


	public void setAdmisorNombre(String admisorNombre) {
		this.admisorNombre = admisorNombre;
	}
	
	public java.util.List<CalendarsAdmisor> getCalendarsAdmisor() {
		return calendarsAdmisor;
	}


	public void setCalendarsAdmisor(java.util.List<CalendarsAdmisor> calendarsAdmisor) {
		this.calendarsAdmisor = calendarsAdmisor;
	}



}
